package com.sz.biz.common.project.service;

import com.sz.biz.common.project.entity.Project;
import com.sz.biz.common.project.entity.ProjectAudit;
import com.sz.biz.common.project.entity.ProjectQuestion;
import com.sz.biz.common.project.dto.ProjectDto;
import com.sz.biz.common.project.dto.ProjectProcessStatusDto;
import com.sz.biz.common.project.dto.ProjectUserOrgDto;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;

import java.util.List;
import java.util.Map;

/**
 * Function: ProjectService. <br>
 * Date: 2017年07月13日 9:21 <br>
 * Author: wentao.chang
 */
public interface ProjectService {
    /**
     * 保存新项目
     *
     * @param project  project
     * @param issubmit 是否直接提交
     */
    Integer save(ProjectDto project, boolean issubmit);

    /**
     * 修改项目
     *
     * @param id       id
     * @param project  project
     * @param issubmit
     */
    void update(Integer id, ProjectDto project, boolean issubmit);

    /**
     * 按ids删除项目
     *
     * @param ids ids
     */
    void deleteByIds(List<Integer> ids);

    /**
     * 按ids搜
     *
     * @param ids ids
     */
    List<Project> findByIds(List<Integer> ids);

    /**
     * 按ids提交审核
     *
     * @param ids ids
     */
    void submitByIds(List<Integer> ids);

    /**
     * 按id搜详情
     *
     * @param id id
     */
    ProjectDto findDtoById(Integer id);

    /**
     * 按id搜
     *
     * @param id id
     */
    Project findBaseById(Integer id);

    /**
     * 按id搜
     *
     * @param id id
     */
    Project findDetailById(Integer id);

    /**
     * 查询项目列表
     *
     * @param qp qp
     */
    QResultDto findByFilter(QueryParams qp);

    /**
     * 查询项目列表短接口
     *
     * @param params params
     */
    QResultDto findShortByFilter(QueryParams params);

    /**
     * 查询项目列表短接口,没有分页
     * @param orderType
     * @param sellerId
     * @param purchaserId
     * @return
     */
    List<Project> findSimpleProjects(String orderType, Integer sellerId, Integer purchaserId);

    /**
     * 提交初审信息
     *
     * @param projectId    projectId
     * @param projectAudit projectAudit
     */
    void updateFirstAudit(Integer projectId, ProjectAudit projectAudit);

    /**
     * 修改初审信息
     *
     * @param projectId     projectId
     * @param firstAuditMsg firstAuditMsg
     */
    void updateFirstAuditMsg(Integer projectId, String firstAuditMsg);

    /**
     * 正常结项
     *
     * @param projectId  projectId
     * @param projectDto projectDto
     */
    void closeProject(Integer projectId, ProjectDto projectDto);


    /**
     * 更新打回状态
     */
    void updateRejectStatus(Integer projectId, boolean isReject);

    /**
     * 修改终审信息
     *
     * @param projectId     projectId
     * @param finalAuditMsg finalAuditMsg
     * @param isPass        isPass
     */
    void updateFinalAuditMsg(Integer projectId, String finalAuditMsg, boolean isPass);

    List<ProjectUserOrgDto> getProjectUserOrg(int userId);

    ProjectProcessStatusDto getProjectProcessStatus(int projectId);

    void addAskQuestion(ProjectQuestion projectQuestion, int projectId);

    /**
     * 校验项目编码
     *  @param id   id
     * @param code code
     * @param bizTypeCode bizTypeCode
     */
    void codeCheck(int id, String code, String bizTypeCode);

    /**
     * 贸易相关的组权限
     */
    Map<String,Object> userProjectPermission();
}
